iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
1
自我挑戰組

神羅天征! 一起(爆肝)征服程式解題系列 第 17

[Day 17] LeetCode - 26 Remove Duplicates from Sorted Array

  • 分享至 

  • xImage
  •  

本篇同步發布於Blog:[解題] LeetCode - 26 Remove Duplicates from Sorted Array

平台:

LeetCode

題號:

26 - Remove Duplicates from Sorted Array

題目連結:

https://leetcode.com/problems/remove-duplicates-from-sorted-array/

題目說明:

        輸入1個整數的陣列nums,裡面元素已經從小到大排序,求在nums移除重複的元素,並回傳移除後的陣列長度。題目不能用額外的計算空間。

        比如範例輸入的[1, 1, 2],移除重複元素的陣列是[1, 2],並回傳長度2。

解題方法:

    用一個count變數,紀錄從i = 1開始往後掃描,和i - 1有相同的值的次數,再用count做位移取代舊的值。最後要回傳的長度 = 原始長度 - count。

比如輸入 [1, 1, 2, 3, 3]

  1. 第2個元素1和第1個元素1相同,count變成1,nums[i - count] = nums[i] => nums[0] = 1
  2. 第3個元素2和第2個元素1不相同,count不變,nums[i-count] = nums[i] => nums[1] = 2
  3. 第4個元素3和第3個元素2不相同,count不變,nums[i-count] = nums[i] => nums[2] = 3
  4. 第5個元素3和第4個元素3相同,count變成2,nums[i-count] = nums[i] => nums[2] = 3 
  5. 最後陣列變成[1, 2, 3] 回傳的長度為 5 - 2 = 3

難度為Easy

程式碼 (C++ 與 C#):

#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int count = 0 ;
        int originSize = nums.size();
        for(int i = 1 ; i < originSize;++i){
            if(nums[i] == nums[i-1]){
                count++;
            }
            nums[i-count] = nums[i];
        }
        
        return originSize - count;
    }
};

int main() {
	Solution sol;
	vector<int> nums{1,1,2};
	int len = sol.removeDuplicates(nums);
	for(int i = 0 ; i < len;++i){
		cout << " " << nums[i];
	}
	cout << endl;
	return 0;
}
using System;

namespace LeetCode26
{
    public class Solution {
	    public int RemoveDuplicates(int[] nums) {
	        int count = 0 ;
	        int originSize = nums.Length;
	        for(int i = 1 ; i < originSize;++i){
	            if(nums[i] == nums[i-1]){
	                count++;
	            }
	            nums[i-count] = nums[i];
	        }
 
	        return originSize - count;
	    }
	}
    class Program
    {
        static void Main(string[] args)
        {
            Solution sol = new Solution();
            int[] nums = new int[]{1,1,2};
            int len = sol.RemoveDuplicates(nums);
            for(int i = 0 ;i < len;++i){
                Console.Write(" " + nums[i]);
            }
            Console.Read();
        }
    }
}

GITHUB位置(C++ 與 C#):

https://github.com/u8989332/ProblemSolving/blob/master/LeetCode/C%2B%2B/1-99/26.cpp

https://github.com/u8989332/ProblemSolving/blob/master/LeetCode/C%23/1-99/26.cs


上一篇
[Day 16] LeetCode - 238 Product of Array Except Self
下一篇
[Day 18] LeetCode - 122 Best Time to Buy and Sell Stock II
系列文
神羅天征! 一起(爆肝)征服程式解題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言